/*
  RoxyFileman - web based file manager. Ready to use with CKEditor, TinyMCE. 
  Can be easily integrated with any other WYSIWYG editor or CMS.

  Copyright (C) 2013, RoxyFileman.com - Lyubomir Arsov. All rights reserved.
  For licensing, see LICENSE.txt or http://RoxyFileman.com/license

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.

  Contact: Lyubomir Arsov, liubo (at) web-lobby.com
*/
$.ajaxSetup({
	cache: false
});

function selectFile(item) {
	$('#pnlFileList li').removeClass('selected');
	$(item).addClass('selected');
	var html = RoxyUtils.GetFilename($(item).attr('data-path'));
	html += ' (' + t('Size') + ': ' + RoxyUtils.FormatFileSize($(item).attr('data-size'));
	if ($(item).attr('data-w') > 0)
		html += ', ' + t('Dimensions') + ':' + $(item).attr('data-w') + 'x' + $(item).attr('data-h');
	html += ')';
	$('#pnlStatus').html(html);
}

function getLastDir() {
	return RoxyUtils.GetCookie('roxyld');
}

function setLastDir(path) {
	RoxyUtils.SetCookie('roxyld', path, 10);
}

function selectDir(item, indeterm) {
	var d = Directory.Parse($(item).parent('li').attr('data-path'));
	if (d) {
		d.Select(null, indeterm);
	}
}

function startDragDir() {

}

function startDragFile() {
	selectFile(this);
}

function dragFileOver() {
	$(this).children('img.dir').attr('src', RoxyUtils.GetAssetPath('images/folder-green.png'));
	$(this).addClass("dragover");
}

function dragFileOut() {
	$('#pnlDirList').find('img.dir').attr('src', RoxyUtils.GetAssetPath('images/folder.png'));
	$(this).removeClass("dragover");
}

function makeDragFile(e) {
	var li = $(e.target).closest('li');
	var f = new File(li.attr('data-path'));
	var i = li.find('.file-icon');
	return '<div class="pnlDragFile" data-path="' + f.fullPath + '">' + i[0].outerHTML + '&nbsp;' + f.name + '</div>';
}

function makeDragDir(e) {
	var target = $(e.target);
	var path = target.attr('data-path') || target.closest('li').attr('data-path');
	var f = new Directory(path);
	return '<div class="pnlDragDir" data-path="' + f.fullPath + '"><img src="' + RoxyUtils.GetAssetPath('images/folder.png') + '" align="absmiddle">&nbsp;' + f.name + '</div>';
}

function moveDir(e, ui, obj) {
	var dir = Directory.Parse(ui.draggable.attr('data-path'));
	var target = Directory.Parse($(obj).parent('li').attr('data-path'));
	if (target.fullPath !== dir.path)
		dir.Move(target.fullPath);

	$(obj).removeClass('dragover');
}

function moveFile(e, ui, obj) {
	var li = $(obj).parent('li');
	var f = new File(ui.draggable.attr('data-path'));
	var d = Directory.Parse(li.attr('data-path'));
	var src = Directory.Parse(f.path);
	if (f.path !== d.fullPath)
		f.Move(d.fullPath);

	$(obj).removeClass('dragover');
}

function moveObject(e, ui) {
	e.stopPropagation();
	if (ui.draggable.hasClass('directory'))
		moveDir(e, ui, this);
	else
		moveFile(e, ui, this);
	dragFileOut();
}

function clickFirstOnEnter(elId) {
	$('#' + elId).unbind('keypress');
	$('.actions input').each(function () {
		this.blur();
	});
	$('#' + elId).keypress(function (e) {
		if (e.keyCode === $.ui.keyCode.ENTER) {
			e.stopPropagation();
			$(this).parent().find('.ui-dialog-buttonset button').eq(0).trigger('click');
		}
	});
}

function addDir() {
	var f = getSelectedDir();
	if (!f)
		return;
	clickFirstOnEnter('pnlDirName');
	$('#txtDirName').val('');

	var dialogButtons = {};
	dialogButtons[t('CreateDir')] = function () {
		var newName = $.trim($('#txtDirName').val());
		if (!newName)
			alert(t('E_MissingDirName'));
		f.Create(newName, () => {
			$('#pnlDirName').dialog('close');
		});
	};
	dialogButtons[t('Cancel')] = function () {
		$('#pnlDirName').dialog('close');
	};
	$('#pnlDirName').dialog({
		title: t('T_CreateDir'),
		modal: true,
		buttons: dialogButtons
	});
}
var uploadFileList = new Array();

function showUploadList(files) {
	var filesPane = $('#uploadFilesList');
	filesPane.html('');
	clearFileField();
	for (i = 0; i < files.length; i++) {
		var f = files[i];
		var html = [
			'<div class="fileUpload">',
			'<div class="fileName">' + f.name + ' (' + RoxyUtils.FormatFileSize(f.size) + ')',
			'<span class="progressPercent"></span>',
			'<div class="uploadProgress"><div class="stripes"></div></div>',
			'</div>',
			'<a class="removeUpload" onclick="removeUpload(' + i + ')"></a>',
			'</div>'
		].join('');
		filesPane.append(html);
	}
	if (files.length > 0)
		$('#btnUpload').button('enable');
	else
		$('#btnUpload').button('disable');
}

function listUploadFiles(files) {
	if (!window.FileList) {
		$('#btnUpload').button('enable');
	} else if (files.length > 0) {
		uploadFileList = new Array();
		addUploadFiles(files);
	}
}

function addUploadFiles(files) {
	for (i = 0; i < files.length; i++)
		uploadFileList.push(files[i]);
	showUploadList(uploadFileList);
}

function removeUpload(i) {
	var el = findUploadElement(i);
	el.remove();
	try {
		uploadFileList.splice(i, 1);
		showUploadList(uploadFileList);
	} catch (ex) {
		//alert(ex); 
	}
}

function findUploadElement(i) {
	return $('#uploadFilesList .fileUpload:eq(' + (i) + ')');
}

function updateUploadProgress(e, i) {
	var el = findUploadElement(i);
	var percent = 99;
	if (e.lengthComputable) {
		percent = Math.floor((e.loaded / e.total) * 100);
	}
	if (percent > 99)
		percent = 99;
	el.find('.uploadProgress').css('width', percent + '%');
	el.find('.progressPercent').html(' - ' + percent + '%');
}

function uploadComplete(e, i) {
	uploadFinished(e, i, 'ok');
}

function uploadError(e, i) {
	setUploadError(i);
	uploadFinished(e, i, 'error');
}

function setUploadError(i) {
	var el = findUploadElement(i);
	el.find('.uploadProgress').css('width', '100%').addClass('uploadError').removeClass('uploadComplete');
	el.find('.progressPercent').html(' - <span class="error">' + t('E_UploadingFile') + '</span>');
}

function setUploadSuccess(i) {
	var el = findUploadElement(i);
	el.find('.uploadProgress').css('width', '100%').removeClass('uploadError').addClass('uploadComplete');
	el.find('.progressPercent').html(' - 100%');
}

function uploadCanceled(e, i) {
	uploadFinished(e, i, 'error');
}

function uploadFinished(e, i, res) {
	var el = findUploadElement(i);
	var httpRes = null;
	try {
		httpRes = JSON.parse(e.target.responseText);
	} catch (ex) { /**/ }

	if ((httpRes && httpRes.res === 'error') || res !== 'ok') {
		res = 'error';
		setUploadError(i);
	} else {
		res = 'ok';
		setUploadSuccess(i);
	}

	el.attr('data-ulpoad', res);
	checkUploadResult();
}

function checkUploadResult() {
	var all = $('#uploadFilesList .fileUpload').length;
	var completed = $('#uploadFilesList .fileUpload[data-ulpoad]').length;
	var success = $('#uploadFilesList .fileUpload[data-ulpoad="ok"]').length;
	if (completed === all) {
		//$('#uploadResult').html(success + ' files uploaded; '+(all - success)+' failed');
		uploadFileList = new Array();
		var d = Directory.Parse($('#hdDir').val());
		d.ListFiles(true);
		$('#btnUpload').button('disable');
	}
}

function fileUpload(f, i) {
	var http = new XMLHttpRequest();
	var fData = new FormData();
	var el = findUploadElement(i);
	el.find('.removeUpload').remove();
	fData.append("action", 'upload');
	fData.append("method", 'ajax');
	fData.append("d", $('#hdDir').attr('value'));
	fData.append("files[]", f);
	http.upload.addEventListener("progress", function (e) {
		updateUploadProgress(e, i);
	}, false);
	http.addEventListener("load", function (e) {
		uploadComplete(e, i);
	}, false);
	http.addEventListener("error", function (e) {
		uploadError(e, i);
	}, false);
	http.addEventListener("abort", function (e) {
		uploadCanceled(e, i);
	}, false);
	http.open("POST", RoxyUtils.GetRootPath(RoxyFilemanConf.UPLOAD), true);
	http.setRequestHeader("Accept", "*/*");
	http.send(fData);
}

function dropFiles(e, append) {
	if (e && e.dataTransfer && e.dataTransfer.files) {
		addFile();
		if (append)
			addUploadFiles(e.dataTransfer.files);
		else
			listUploadFiles(e.dataTransfer.files);
	} else
		addFile();
}

function clearFileField(selector) {
	if (!selector)
		selector = '#fileUploads';
	try {
		$(selector).val('');
		$(selector).val(null);
	} catch (ex) { /**/ }
}

function addFileClick() {
	$('#uploadResult').html('');
	showUploadList(new Array());
	addFile();
}

function addFile() {
	clickFirstOnEnter('dlgAddFile');
	$('#uploadResult').html('');
	clearFileField();
	var dialogButtons = {};
	dialogButtons[t('Upload')] = {
		id: 'btnUpload',
		text: t('Upload'),
		disabled: true,
		click: function () {
			if (!$('#fileUploads').val() && (!uploadFileList || uploadFileList.length === 0))
				alert(t('E_SelectFiles'));
			else {
				if (!RoxyFilemanConf.UPLOAD) {
					alert(t('E_ActionDisabled'));
					//$('#dlgAddFile').dialog('close');
				} else {
					if (window.FormData && window.XMLHttpRequest && window.FileList && uploadFileList && uploadFileList.length > 0) {
						for (i = 0; i < uploadFileList.length; i++) {
							fileUpload(uploadFileList[i], i);
						}
					} else {
						document.forms['addfile'].action = RoxyUtils.GetRootPath(RoxyFilemanConf.UPLOAD);
						document.forms['addfile'].submit();
					}
				}
			}
		}
	};

	dialogButtons[t('Cancel')] = function () {
		$('#dlgAddFile').dialog('close');
	};
	$('#dlgAddFile').dialog({
		title: t('T_AddFile'),
		modal: true,
		buttons: dialogButtons,
		width: 400
	});
}

function fileUploaded(res) {
	var d;
	if (res.res === 'ok' && res.msg) {
		$('#dlgAddFile').dialog('close');
		d = Directory.Parse($('#hdDir').val());
		d.ListFiles(true);
		alert(res.msg);
	} else if (res.res === 'ok') {
		$('#dlgAddFile').dialog('close');
		d = Directory.Parse($('#hdDir').val());
		d.ListFiles(true);
	} else
		alert(res.msg);
}

function renameDir() {
	var f = getSelectedDir();
	if (!f)
		return;
	if ($('[data-path="' + f.fullPath + '"]').parents('li').length < 1) {
		alert(t('E_CannotRenameRoot'));
		return;
	}
	clickFirstOnEnter('pnlDirName');
	$('#txtDirName').val(f.name);

	var dialogButtons = {};
	dialogButtons[t('RenameDir')] = function () {
		var newName = $.trim($('#txtDirName').val());
		if (!newName)
			alert(t('E_MissingDirName'));
		f.Rename(newName, () => {
			$('#pnlDirName').dialog('close');
		});
			
	};
	dialogButtons[t('Cancel')] = function () {
		$('#pnlDirName').dialog('close');
	};

	$('#pnlDirName').dialog({
		title: t('T_RenameDir'),
		modal: true,
		buttons: dialogButtons
	});
	RoxyUtils.SelectText('txtDirName', 0, new String(f.name).length);
}

function renameFile() {
	var f = getSelectedFile();
	if (!f)
		return;
	clickFirstOnEnter('pnlRenameFile');
	$('#txtFileName').val(f.name);

	var dialogButtons = {};
	dialogButtons[t('RenameFile')] = function () {
		var newName = $.trim($('#txtFileName').val());
		if (!newName)
			alert('Missing file name');
		else {
			f.Rename(newName, () => {
				$('li[data-path="' + f.fullPath + '"] .name').text(newName);
				$('li[data-path="' + f.fullPath + '"]').attr('data-path', RoxyUtils.MakePath(f.path, newName));
				$('#pnlRenameFile').dialog('close');
			});
		}
	};
	dialogButtons[t('Cancel')] = function () {
		$('#pnlRenameFile').dialog('close');
	};

	$('#pnlRenameFile').dialog({
		title: t('T_RenameFile'),
		modal: true,
		buttons: dialogButtons
	});
	if (f.name.lastIndexOf('.') > 0)
		RoxyUtils.SelectText('txtFileName', 0, f.name.lastIndexOf('.'));
}

function getSelectedFile() {
	var ret = null;
	if ($('#pnlFileList .selected').length > 0) {
		var el = $('#pnlFileList .selected');
		ret = new File(el.attr('data-path'));
	}
		
	return ret;
}

function getSelectedDir() {
	var ret = null;
	var indeterm = $('#pnlDirList').data('indeterm');

	if (indeterm) {
		ret = Directory.Parse(indeterm.closest('li').attr('data-path'));
	}
	else if ($('#pnlDirList .selected')) {
		ret = Directory.Parse($('#pnlDirList .selected').closest('li').attr('data-path'));
	}

	return ret;
}

function deleteDir(path) {
	var d = null;
	if (path)
		d = Directory.Parse(path);
	else
		d = getSelectedDir();

	if (d && confirm(t('Q_DeleteFolder'))) {
		d.Delete();
	}
}

function deleteFile() {
	var f = getSelectedFile();
	if (f && confirm(t('Q_DeleteFile'))) {
		f.Delete();
	}
}

function previewFile() {
	var f = getSelectedFile();
	if (f) {
		window.open(f.fullPath);
	}
}

function downloadFile() {
	var f = getSelectedFile();
	if (f && RoxyFilemanConf.DOWNLOAD) {
		var url = RoxyUtils.AddParam(RoxyUtils.GetRootPath(RoxyFilemanConf.DOWNLOAD), 'f', f.fullPath);
		window.frames['frmUploadFile'].location.href = url;
	} else if (!RoxyFilemanConf.DOWNLOAD)
		alert(t('E_ActionDisabled'));
}

function downloadDir() {
	var d = getSelectedDir();
	if (d && RoxyFilemanConf.DOWNLOADDIR) {
		var url = RoxyUtils.AddParam(RoxyUtils.GetRootPath(RoxyFilemanConf.DOWNLOADDIR), 'd', d.fullPath);
		window.frames['frmUploadFile'].location.href = url;
	} else if (!RoxyFilemanConf.DOWNLOAD)
		alert(t('E_ActionDisabled'));
}

function closeMenus(el) {
	if (!el || el === 'dir') {
		var indeterm = $('#pnlDirList').data('indeterm');
		if (indeterm) {
			$('#pnlDirList').data('indeterm', null);
			$('#pnlDirList .indeterm').removeClass('indeterm');
		}
		$('#menuDir').hide();
	}
	if (!el || el === 'file') {
		$('#menuFile').hide();
	}
}

function selectFirst() {
	var item = $('#pnlDirList li:first').children('div').first();
	if (item.length > 0)
		selectDir(item);
	else
		window.setTimeout('selectFirst()', 300);
}

function tooltipContent() {
	if ($('#menuFile').is(':visible'))
		return '';
	var html = '';
	var f = File.Parse($(this).attr('data-path'));
	if ($('#hdViewType').val() === 'thumb' && f.IsImage()) {
		html = f.fullPath + '<br><span class="filesize">' + t('Size') + ': ' + RoxyUtils.FormatFileSize(f.size) + ' ' + t('Dimensions') + ': ' + f.width + 'x' + f.height + '</span>';
	}
    else if (f.IsImage()) {
		var imgUrl = f.fullPath;
		if (RoxyFilemanConf.GENERATETHUMB) {
			// Let the SMNET MediaController do the image resizing per ImageProcessor
			imgUrl = RoxyUtils.AddParam(imgUrl, 'w', RoxyFilemanConf.PREVIEW_THUMB_WIDTH);
			imgUrl = RoxyUtils.AddParam(imgUrl, 'h', RoxyFilemanConf.PREVIEW_THUMB_HEIGHT);
		}
		//else
		html = '<div class="text-center mb-3"><img src="' + imgUrl + '" class="imgPreview"></div>' + f.name + ' <br><span class="filesize">' + t('Size') + ': ' + RoxyUtils.FormatFileSize(f.size) + ' ' + t('Dimensions') + ': ' + f.width + 'x' + f.height + '</span>';
	}
	else {
		html = f.fullPath + ' <span class="filesize">' + t('Size') + ': ' + RoxyUtils.FormatFileSize(f.size) + '</span>';
	}	

	return html;
}

function filterFiles() {
	var str = $('#txtSearch').val();
	$('#pnlSearchNoFiles').hide();
	if ($('#pnlFileList li').length === 0)
		return;
	if (!str) {
		$('#pnlFileList li').show();
		return;
	}
	var i = 0;
	$('#pnlFileList li').each(function () {
		var name = $(this).children('.name').text();
		if (name.toLowerCase().indexOf(str.toLowerCase()) > -1) {
			i++;
			$(this).show();
		} else {
			$(this).removeClass('selected');
			$(this).hide();
		}
	});
	if (i === 0)
		$('#pnlSearchNoFiles').show();
}

function sortFiles() {
	var d = getSelectedDir();
	if (!d)
		return;
	d.ListFiles();
	filterFiles();
	switchView($('#hdViewType').val());
}

function switchView(t) {
	if (t === $('#hdViewType').val())
		return;
	if (!t)
		t = $('#hdViewType').val();

	var pnlFileList = $('#pnlFileList');

	$('.btn-view').removeClass('active');

	if (t === 'thumb') {
		pnlFileList.addClass('thumbView');
		if ($('#dynStyle').length === 0) {
			$('head').append('<style id="dynStyle" />');
			var rules = 'ul#pnlFileList.thumbView li{width:' + (parseInt(RoxyFilemanConf.THUMBS_VIEW_WIDTH) + 22) + 'px;}';
			rules += 'ul#pnlFileList.thumbView li{height:' + (parseInt(RoxyFilemanConf.THUMBS_VIEW_HEIGHT) + 42) + 'px;}';
			rules += 'ul#pnlFileList.thumbView .icon{width:' + RoxyFilemanConf.THUMBS_VIEW_WIDTH + 'px;}';
			rules += 'ul#pnlFileList.thumbView .icon{height:' + RoxyFilemanConf.THUMBS_VIEW_HEIGHT + 'px;}';
			$('#dynStyle').html(rules);
		}
		$('li', pnlFileList).each(function () {
			var isImage = RoxyUtils.IsImage($(this).attr('data-path'));
			var imgUrl = $(this).attr('data-path');
			if (RoxyFilemanConf.GENERATETHUMB && isImage) {
				// Let the SMNET MediaController do the image resizing per ImageProcessor
				imgUrl = RoxyUtils.AddParam(imgUrl, 'w', RoxyFilemanConf.THUMBS_VIEW_WIDTH);
				imgUrl = RoxyUtils.AddParam(imgUrl, 'h', RoxyFilemanConf.THUMBS_VIEW_HEIGHT);
			}
			$(this).find('> .icon > img').attr('src', imgUrl);
			$(this).tooltip('option', 'show', {
				delay: 50,
				duration: 200
			});
		});
		$('#btnThumbView').addClass('active');
	}
	else {
		pnlFileList.removeClass('thumbView');
		$('li', pnlFileList).each(function () {
			//$(this).find('> .icon > img').attr('src', $(this).data('icon')).removeClass("thumb");
			$(this).tooltip('option', 'show', {
				delay: 500,
				duration: 200
			});
		});
		$('#btnListView').addClass('active');
	}
	$('#hdViewType').val(t);
	RoxyUtils.SetCookie('roxyview', t, 10);
}
var clipBoard = null;

function Clipboard(a, obj) {
	this.action = a;
	this.obj = obj;
}

function cutDir() {
	var d = getSelectedDir();
	if (d) {
		setClipboard('cut', d);
		d.GetElement().addClass('disabled');
	}
}

function copyDir() {
	var d = getSelectedDir();
	if (d) {
		setClipboard('copy', d);
	}
}

function cutFile() {
	var f = getSelectedFile();
	if (f) {
		setClipboard('cut', f);
		f.GetElement().addClass('disabled');
	}
}

function copyFile() {
	var f = getSelectedFile();
	if (f) {
		setClipboard('copy', f);
	}
}

function pasteToFiles(e, el) {
	if ($(el).hasClass('disabled')) {
		e.stopPropagation();
		return false;
	}
	var d = getSelectedDir();
	if (!d)
		d = Directory.Parse($('#pnlDirList li:first').children('div').first());
	if (d && clipBoard && clipBoard.obj) {
		if (clipBoard.action === 'copy')
			clipBoard.obj.Copy(d.fullPath);
		else {
			clipBoard.obj.Move(d.fullPath, () => {
				clearClipboard();
			});
		}
	}
	return true;
}

function pasteToDirs(e, el) {
	if ($(el).hasClass('disabled')) {
		e.stopPropagation();
		return false;
	}
	var d = getSelectedDir();
	if (!d)
		d = Directory.Parse($('#pnlDirList li:first').children('div').first());
	if (clipBoard && d) {
		if (clipBoard.action === 'copy') {
			clipBoard.obj.Copy(d.fullPath);
		}	
		else {
			clipBoard.obj.Move(d.fullPath, () => {
				clearClipboard();
				if (!$("#pnlDirList").data("indeterm")) {
					d.ListFiles(true);
				}
			});
		}
	} else
		alert('error');
	return true;
}

function clearClipboard() {
	$('#pnlDirList li').removeClass('disabled');
	$('#pnlFileList li').removeClass('disabled');
	clipBoard = null;
	$('.paste').addClass('disabled');
}

function setClipboard(a, obj) {
	clearClipboard();
	if (obj) {
		clipBoard = new Clipboard(a, obj);
		$('.paste').removeClass('disabled');
	}
}

function ResizeLists() {
	var tmp = $(window).innerHeight() - $('#fileActions .actions').outerHeight() - $('.bottomLine').outerHeight();
	$('.scrollPane').css('height', tmp);
}

function removeDisabledActions() {
	if (RoxyFilemanConf.CREATEDIR === '') {
		$('#mnuCreateDir').next().remove();
		$('#mnuCreateDir').remove();
		$('#btnAddDir').remove();
	}
	if (RoxyFilemanConf.DELETEDIR === '') {
		$('#mnuDeleteDir').prev().remove();
		$('#mnuDeleteDir').remove();
		$('#btnDeleteDir').remove();
	}
	if (RoxyFilemanConf.MOVEDIR === '') {
		$('#mnuDirCut').next().remove();
		$('#mnuDirCut').remove();
	}
	if (RoxyFilemanConf.COPYDIR === '') {
		$('#mnuDirCopy').next().remove();
		$('#mnuDirCopy').remove();
	}
	if (RoxyFilemanConf.COPYDIR === '' && RoxyFilemanConf.MOVEDIR === '') {
		$('#mnuDirPaste').next().remove();
		$('#mnuDirPaste').remove();
	}
	if (RoxyFilemanConf.RENAMEDIR === '') {
		$('#mnuRenameDir').next().remove();
		$('#mnuRenameDir').remove();
		$('#btnRenameDir').remove();
	}
	if (RoxyFilemanConf.UPLOAD === '') {
		$('#btnAddFile').remove();
	}
	if (RoxyFilemanConf.DOWNLOAD === '') {
		$('#mnuDownload').next().remove();
		$('#mnuDownload').remove();
	}
	if (RoxyFilemanConf.DOWNLOADDIR === '') {
		$('#mnuDownloadDir').next().remove();
		$('#mnuDownloadDir').remove();
	}
	if (RoxyFilemanConf.DELETEFILE === '') {
		$('#mnuDeleteFile').prev().remove();
		$('#mnuDeleteFile').remove();
		$('#btnDeleteFile').remove();
	}
	if (RoxyFilemanConf.MOVEFILE === '') {
		$('#mnuFileCut').next().remove();
		$('#mnuFileCut').remove();
	}
	if (RoxyFilemanConf.COPYFILE === '') {
		$('#mnuFileCopy').next().remove();
		$('#mnuFileCopy').remove();
	}
	if (RoxyFilemanConf.COPYFILE === '' && RoxyFilemanConf.MOVEFILE === '') {
		$('#mnuFilePaste').next().remove();
		$('#mnuFilePaste').remove();
	}
	if (RoxyFilemanConf.RENAMEFILE === '') {
		$('#mnuRenameFile').next().remove();
		$('#mnuRenameFile').remove();
		$('#btnRenameFile').remove();
	}
}

function getPreselectedFile() {
	var filePath = RoxyUtils.GetUrlParam('selected');
	if (!filePath) {
		var win;
		switch (getFilemanIntegration()) {
			case 'ckeditor':
				try {
					var dialog = window.opener.CKEDITOR.dialog.getCurrent();
					filePath = dialog.getValueOf('info', (dialog.getName() === 'link' ? 'url' : 'txtUrl'));
				} catch (ex) { /**/ }
				break;
			case 'tinymce3':
				try {
					win = tinyMCEPopup.getWindowArg("window");
					filePath = win.document.getElementById(tinyMCEPopup.getWindowArg("input")).value;
					if (filePath.indexOf('..') === 0)
						filePath = filePath.substr(2);
				} catch (ex) { /**/ }
				break;
			case 'tinymce4':
				try {
					win = (window.opener ? window.opener : window.parent);
					filePath = win.document.getElementById(RoxyUtils.GetUrlParam('input')).value;
					if (filePath.indexOf('..') === 0)
						filePath = filePath.substr(2);
				} catch (ex) { /**/ }
				break;
			default:
				filePath = GetSelectedValue();
				break;
		}
	}
	if (RoxyFilemanConf.RETURN_URL_PREFIX) {
		var prefix = RoxyFilemanConf.RETURN_URL_PREFIX;
		if (filePath.indexOf(prefix) === 0) {
			if (prefix.substr(-1) === '/')
				prefix = prefix.substr(0, prefix.length - 1);
			filePath = filePath.substr(prefix.length);
		}
	}

	return filePath;
}

function initSelection(filePath) {
	var hasSelection = false,
		fileSelected = true;
	if (!filePath)
		filePath = getPreselectedFile();
	if (!filePath && RoxyUtils.ToBool(RoxyFilemanConf.OPEN_LAST_DIR)) {
		filePath = getLastDir();
		fileSelected = false;
	}
	if (filePath) {
		var p = (fileSelected ? RoxyUtils.GetPath(filePath) : filePath);
		var d = tmp = Directory.Parse(p);
		do {
			if (tmp) {
				tmp.Expand(true);
				hasSelection = true;
			}
			tmp = Directory.Parse(tmp.path);
		} while (tmp);

		if (d) {
			d.Select(filePath);
			hasSelection = true;
		}
	}
	if (!hasSelection)
		selectFirst();
}

$(function () {
	RoxyUtils.LoadConfig(() => {
		var d = new Directory();
		d.LoadAll();
		$('#wraper').show();

		window.setTimeout('initSelection()', 100);

		RoxyUtils.Translate();
		$('body').on('click', function () {
			closeMenus();
		});

		var viewType = RoxyUtils.GetCookie('roxyview');
		if (!viewType)
			viewType = RoxyFilemanConf.DEFAULTVIEW;
		if (viewType)
			switchView(viewType);

		ResizeLists();
		$(window).resize(ResizeLists);

		document.oncontextmenu = function () {
			//return false;
		};
		removeDisabledActions();
		$('#copyYear').html(new Date().getFullYear());
		if (RoxyFilemanConf.UPLOAD && RoxyFilemanConf.UPLOAD !== '') {
			var dropZone = document.getElementById('fileActions');
			dropZone.ondragover = function () {
				return false;
			};
			dropZone.ondragend = function () {
				return false;
			};
			dropZone.ondrop = function (e) {
				e.preventDefault();
				e.stopPropagation();
				dropFiles(e);
			};

			dropZone = document.getElementById('dlgAddFile');
			dropZone.ondragover = function () {
				return false;
			};
			dropZone.ondragend = function () {
				return false;
			};
			dropZone.ondrop = function (e) {
				e.preventDefault();
				e.stopPropagation();
				dropFiles(e, true);
			};
		}

		if (getFilemanIntegration() === 'tinymce3') {
			try {
				$('body').append('<script src="js/tiny_mce_popup.js"><\/script>');
			} catch (ex) { /**/ }
		}
	});
});

function getFilemanIntegration() {
	var integration = RoxyUtils.GetUrlParam('integration');
	if (!integration)
		integration = RoxyFilemanConf.INTEGRATION;

	return integration.toLowerCase();
}

function setFile() {
	var f = getSelectedFile();
	if (!f) {
		alert(t('E_NoFileSelected'));
		return;
	}
	var insertPath = f.fullPath;
	if (RoxyFilemanConf.RETURN_URL_PREFIX) {
		var prefix = RoxyFilemanConf.RETURN_URL_PREFIX;
		if (prefix.substr(-1) === '/')
			prefix = prefix.substr(0, prefix.length - 1);
		insertPath = prefix + (insertPath.substr(0, 1) !== '/' ? '/' : '') + insertPath;
	}

	var win;
	switch (getFilemanIntegration()) {
		case 'ckeditor':
			window.opener.CKEDITOR.tools.callFunction(RoxyUtils.GetUrlParam('CKEditorFuncNum'), insertPath);
			self.close();
			break;
		case 'tinymce3':
			win = tinyMCEPopup.getWindowArg("window");
			win.document.getElementById(tinyMCEPopup.getWindowArg("input")).value = insertPath;
			if (typeof (win.ImageDialog) !== "undefined") {
				if (win.ImageDialog.getImageData)
					win.ImageDialog.getImageData();

				if (win.ImageDialog.showPreviewImage)
					win.ImageDialog.showPreviewImage(insertPath);
			}
			tinyMCEPopup.close();
			break;
		case 'tinymce4':
			win = (window.opener ? window.opener : window.parent);
			win.document.getElementById(RoxyUtils.GetUrlParam('input')).value = insertPath;
			if (typeof (win.ImageDialog) !== "undefined") {
				if (win.ImageDialog.getImageData)
					win.ImageDialog.getImageData();
				if (win.ImageDialog.showPreviewImage)
					win.ImageDialog.showPreviewImage(insertPath);
			}
			win.tinyMCE.activeEditor.windowManager.close();
			break;
		default:
			FileSelected(f);
			break;
	}
}